#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
#include<map>
#include<set>
#include<unordered_set>
#include<bits/stdc++.h>
#define fi first
#define se second
#define SIZE(x) ((int)x.size())
#define dbg(x) cerr<<#x<<" = "<<(x)<<endl;
#define MP(a,b) make_pair(a,b)
using namespace std;
typedef long long ll;
#define VI vector<int>
#define VVI vector< vector<int> >
#define VC vector<char>
#define PI pair<int,int>
#define PL pair<ll,ll>
#define EPS 0.000001


inline int lson(int x){return x<<1;}
inline int rson(int x){return (x<<1)|1;}

inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}

/*
你有n克面粉，m种粽子。每一种粽子你有t0克粽子馅，包一个需要t1克粽子馅和t2克面粉，并且可以卖t3元钱。
除了这m种粽子，你还可以做没馅的粽子，每一个需要c0克面粉，卖d0元。
第一行输入n,m,c0,d0。接下来m行每一行输入每一种粽子的t0,t1,t2,t3。
请问你使用这些原料包粽子，最多可卖多少钱。

输入示例：
10 2 1 1
6 3 2 50
8 2 1 10

答案：142
 */

int n,m,c0,d0;

int mm[15];
int mf[15];
int val[15];
int dp[15][1500];
int main(){
    #ifdef BUG
    freopen("a.in","r",stdin);
    #endif
	n=read();m=read();
	c0=read();d0=read();
	int t0,t1,t2,t3;
	for(int i=0;i<m;i++){
		t0=read();t1=read();t2=read();t3=read();
		mm[i]=t0/t1;
		mf[i]=t2;
		val[i]=t3;
	}
	memset(dp,0x88,sizeof dp);
	dp[0][n]=0;

	for(int i=1;i<=m;i++){
		for(int j=0;j<=n;j++){
			for(int k=0;k<=mm[i-1];k++){
				if(j+k*mf[i-1]<=n)dp[i][j]=max(dp[i][j],dp[i-1][j+k*mf[i-1]]+k*val[i-1]);
			}
		}
	}

	int res=0;
	for(int i=0;i<=n;i++){
		res=max(res,dp[m][i]+d0*((i)/c0));
	}
	cout<<res<<endl;
}